package cn.ppwx.crm.common.utils;

import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class StrKit {

	/**
	 * 首字母变小写
	 */
	public static String firstCharToLowerCase(String str) {
		char firstChar = str.charAt(0);
		if (firstChar >= 'A' && firstChar <= 'Z') {
			char[] arr = str.toCharArray();
			arr[0] += ('a' - 'A');
			return new String(arr);
		}
		return str;
	}

	/**
	 * 首字母变大写
	 */
	public static String firstCharToUpperCase(String str) {
		char firstChar = str.charAt(0);
		if (firstChar >= 'a' && firstChar <= 'z') {
			char[] arr = str.toCharArray();
			arr[0] -= ('a' - 'A');
			return new String(arr);
		}
		return str;
	}

	/**
	 * 字符串为 null 或者为  "" 时返回 true
	 */
	public static boolean isEmpty(String str) {
		return str == null || "".equals(str.trim()) ? true : false;
	}

	/**
	 * 字符串不为 null 而且不为  "" 时返回 true
	 */
	public static boolean notEmpty(String str) {
		return str == null || "".equals(str.trim()) ? false : true;
	}

	public static boolean notEmpty(Object obj) {
		return obj == null || "".equals(obj.toString().trim()) ? false : true;
	}

	/**
	 * 删除字符串两侧的空白字符
	 * @param str
	 * @return
	 */
	public static String trim(String str){
		if(isEmpty(str)){
			return "";
		}else{
			return str.trim();
		}
	}

	/**
	 * @Title: trim
	 * @Description: 有些对象不是string，可以转成string并去空，但也要判空才能转化
	 * @param @param obj
	 * @param @return
	 * @return String
	 * @author clint.chen
	 * @throws
	 */
	public static String trim(Object obj){
		if(obj == null){
			return "";
		}else{
			return obj.toString().trim();
		}
	}


	/**
	 *
	  * getValueFromBrace: getValueFromBrace:输入字符串，将字符串中存在大括号的数据遍历出来，并将大括号内的字符取出，按集合返回
	  * TODO(这里描述这个方法适用条件 – 可选)
	  * @author qiubiao.chen
	  * 2015年4月27日 上午10:00:35
	  * @Title: getValueFromBrace
	  * @Description: TODO
	  * @param @param role
	  * @param @param result
	  * @return void
	  * @throws
	 */
	public static void getValueFromBrace(String role, List<String> result){
		if(role == null || result == null){
			return;
		}
		Pattern p = Pattern.compile("\\{.*?\\}");// 查找规则公式中大括号以内的字符
	    Matcher m = p.matcher(role);
	    while (m.find()) {// 遍历找到的所有大括号
	    	String param = m.group().replaceAll("\\{", "").replaceAll("\\}", "");// 去掉括号
	    	result.add(param);
	    }
	}

	/**
	 * @Title: keysReplace
	 * @Description: 关键字替换,map中的key 对应的value 替换掉src中的{key}字符
	 * @param @param src
	 * @param @param values
	 * @param @return
	 * @return String
	 * @author clint.chen
	 * @throws
	 */
	public static String keysReplace(String src, Map<String,String> values){
		if(isEmpty(src) || values ==null ||  values.isEmpty()){
			return src;
		}
		Set<String> keys = values.keySet();
		for(String key : keys){
			String value = values.get(key);
			src = src.replace("{"+key+"}", value);
		}
		return src;
	}


	/**
	 * @Title: strLeftAddZero
	 * @Description: 在字符串前面按长度需要，如果长度不够，前面被0，保留字符串本身的空格；如果本身被要求的长度更长，返回原字符串
	 * @param @param param
	 * @param @param len
	 * @param @return
	 * @return String
	 * @author clint.chen
	 * @throws
	 */
	public static String strLeftAddZero(String param, int len){
		StringBuffer result = new StringBuffer("");
		if(param == null){
			for(int index=0; index<len; index++){
				result.append("0");
			}
		}else{
			int lenLeft = len - param.length();
			for(int index=0; index<lenLeft; index++){
				result.append("0");
			}
			result.append(param);
		}
		return result.toString();
	}

	//数组转化为sql使用的字符串
	public static String arrayToStringForSql(Object[] array){
		if(array == null || array.length == 0){
			return null;
		}
		if(array[0] instanceof String){
			StringBuffer strbuf = new StringBuffer();
			boolean isFirst = true;
			for(Object str:array){
				if(!isFirst){
					strbuf.append(",");
				}
				strbuf.append("'").append(str).append("'");
				isFirst = false;
			}
			return strbuf.toString();
		}else{//待扩展
			return null;
		}
	}

}